 /*
  * Copyright (c) 2021, 2023, yishun.cn All rights reserved.
  *
  */
 package com.hmdp.utils;

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;

 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;

 /**
  * <p>Project: hm-dianping-com.hmdp.utils-RedisIdWorker
  * <p>Powered by yishun On 2023-02-20 19:08:53
  *
  * @author yishun [2465734101@qq.com]
  * @version 1.0
  * @since 17
  */

 /**
  * 全局唯一id生成
  */
 @Component
 public class RedisIdWorker {
     /**
      * 开始时间戳
      */
     private static final long BEGIN_TIMESTAMP = 1672531200;
     private static final long COUNT_BIT = 32;
     @Resource
     private StringRedisTemplate stringRedisTemplate;



     public long nextId(String keyPrefix) {
         //1.生成时间戳
         LocalDateTime now = LocalDateTime.now();
         long nowSecond = now.toEpochSecond(ZoneOffset.UTC);
         long timestamp = nowSecond - BEGIN_TIMESTAMP;
         //2.生成序列号
         //获取当前日期，精确到天
         String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));
         long count = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + date);
         //3.拼接,并返回
         return timestamp << COUNT_BIT | count;
     }




 }
